/*
    STL(standard template library)
通过该库，C++为我们提供了一些常用的算法（algorithm)和数据结构（container)。 初学者掌握以下东西就够用了：

vector是典型是最简单的container。
vector是动态数组的抽象，因此具有数组的所有功能。
vector管理的数据称为元素（element）
string可以看作是:typedef vector string.也就是string就是由char构成的vector。
algorithm中的所有函数，都通过指针操作vector的元素。
下面例子中的int可以和替换为Student，操作完全一样。
*/
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main()
{
    /*
    1 auto称为自动变量。
    2 工作原理是：编译器会根据变量的值，自动推断出变量的类型，并完成替换。
    3 如下面:编译器根据a=3推断出a的类型应该是int，所以会在编译之前，将auto替换为int。
    */
    auto a = 3;
    cout<<a*3<<endl;
    /*
    1 定义vector对象，并增加元素
    2 size返回元素数目。
    3 可以用下标访问元素。
    */
    vector<int> v= {23,45,12,34,3};
    v.push_back(89);
    v.push_back(4);
    v[1] = 10;
    cout<<v.size()<<endl;
    cout<<v[2]<<endl;
    /*
    1 将vector中的数据按照升序排序。
    2 参数是指向vector的两个指针。
    */
    sort(v.begin(),v.end());
    /*
    1 将vector中的数据反序。
    2 参数是指向vector的两个指针。
    */
    reverse(v.begin(),v.end());
    /*
    1 遍历vector元素的方法。
    2 ele变量的类型采用了auto，由编译器推断替换。
    3 ele是元素，可以直接使用，但不支持修改。所以这里只是显示。
    */
    for(auto ele : v)
        cout<<ele<<" ";
    cout<<endl;
    /*
    1 修改vector中的元素(下面的演示是偶数加1)。
    2 利用指针。指针的类型仍然采用auto，由编译器自动推断。
    */
     auto it = v.begin();
     for(; it != v.end(); it++){
         if(*it%2 == 0)
             *it = *it + 1;
     }
     /*
     查找最小值
     1 参数是范围指针
     2 返回值是指向最小值的指针，需要用*it，才能得到这个最小值。
     3 注意使用auto定义指针类型。
     */
    it = min_element(v.begin(),v.end());
    cout<<*it<<endl;

}